using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace QldtSdh.DAL.Models.Mapping
{
	public class LopHocPhanMap : EntityTypeConfiguration<LopHocPhan>
	{
		public LopHocPhanMap()
		{
			// Khoá chính
			this.HasKey(t => t.MaLopHocPhanGUID);

			// Các cột
			this.Property(t => t.MaLopHocPhanGUID)
				.IsRequired()
				.HasMaxLength(50);

			this.Property(t => t.TenLopHocPhan)
				.IsRequired()
				.HasMaxLength(255);

			this.Property(t => t.MaHocKyGUID)
				.IsRequired()
				.HasMaxLength(50);

			this.Property(t => t.MaLopKhoaNganhThamChieu)
				.HasMaxLength(50);

			this.Property(t => t.MaHocPhanGUID)
				.IsRequired()
				.HasMaxLength(50);

			this.Property(t => t.HinhThucHoc)
				.HasMaxLength(255);

			this.Property(t => t.HinhThucThi)
				.HasMaxLength(255);

			this.Property(t => t.MaNguoiNhapBangDiemQTHT)
				.HasMaxLength(50);

			this.Property(t => t.MaNguoiDuyetBangDiemQTHT)
				.HasMaxLength(50);

			// Ánh xạ Property của POCO vào Column của Table
			this.ToTable("LopHocPhan");
			this.Property(t => t.MaLopHocPhanGUID).HasColumnName("MaLopHocPhanGUID");
			this.Property(t => t.TenLopHocPhan).HasColumnName("TenLopHocPhan");
			this.Property(t => t.MaHocKyGUID).HasColumnName("MaHocKyGUID");
			this.Property(t => t.MaLopKhoaNganhThamChieu).HasColumnName("MaLopKhoaNganhThamChieu");
			this.Property(t => t.MaHocPhanGUID).HasColumnName("MaHocPhanGUID");
			this.Property(t => t.NgayBatDauDuKien).HasColumnName("NgayBatDauDuKien");
			this.Property(t => t.NgayKetThucDuKien).HasColumnName("NgayKetThucDuKien");
			this.Property(t => t.NgayBatDau).HasColumnName("NgayBatDau");
			this.Property(t => t.NgayKetThuc).HasColumnName("NgayKetThuc");
			this.Property(t => t.HinhThucHoc).HasColumnName("HinhThucHoc");
			this.Property(t => t.HinhThucThi).HasColumnName("HinhThucThi");
            this.Property(t => t.HeSoDiemQTHT).HasColumnName("HeSoDiemQTHT");
			this.Property(t => t.ThoiGianThi).HasColumnName("ThoiGianThi");
			this.Property(t => t.MaNguoiNhapBangDiemQTHT).HasColumnName("MaNguoiNhapBangDiemQTHT");
			this.Property(t => t.NgayNhapBangDiemQTHT).HasColumnName("NgayNhapBangDiemQTHT");
			this.Property(t => t.TrangThaiBangDiemQTHT).HasColumnName("TrangThaiBangDiemQTHT");
			this.Property(t => t.MaNguoiDuyetBangDiemQTHT).HasColumnName("MaNguoiDuyetBangDiemQTHT");
			this.Property(t => t.NgayDuyetBangDiemQTHT).HasColumnName("NgayDuyetBangDiemQTHT");

			// Các quan hệ
			this.HasOptional(t => t.NguoiDuyetBangDiemQTHT)
				.WithMany(t => t.ListLopHocPhan_DaDuyetBangDiemQTHT)
				.HasForeignKey(d => d.MaNguoiDuyetBangDiemQTHT);
			this.HasOptional(t => t.NguoiNhapBangDiemQTHT)
				.WithMany(t => t.ListLopHocPhan_DaNhapBangDiemQTHT)
				.HasForeignKey(d => d.MaNguoiNhapBangDiemQTHT);
			this.HasRequired(t => t.HocKy)
				.WithMany(t => t.ListLopHocPhan)
				.HasForeignKey(d => d.MaHocKyGUID);
			this.HasRequired(t => t.HocPhan)
				.WithMany(t => t.ListLopHocPhan)
				.HasForeignKey(d => d.MaHocPhanGUID);

		}
	}
}
